package cn.bugstack.domain.activity.model.valobj;

import java.util.Date;
import java.util.Objects;

import cn.bugstack.types.common.Constants;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
 * @author hsj
 * @date 2025/2/14 9:29
 */
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GroupBuyActivityDiscountVO {


	/** 自增 */
	private Long id;
	/** 活动ID */
	private Long activityId;
	/** 活动名称 */
	private String activityName;
	/** 来源 */
	private String source;
	/** 渠道 */
	private String channel;
	/** 商品ID */
	private String goodsId;
	/**
	 * 折扣配置
	 */
	private GroupBuyDisCount groupBuyDiscount;
	/** 折扣ID */
	private String discountId;
	/** 拼团方式（0自动成团、1达成目标拼团） */
	private Integer groupType;
	/** 拼团次数限制 */
	private Integer takeLimitCount;
	/** 拼团目标 */
	private Integer target;
	/** 拼团时长（分钟） */
	private Integer validTime;
	/** 活动状态（0创建、1生效、2过期、3废弃） */
	private Integer status;
	/** 活动开始时间 */
	private Date startTime;
	/** 活动结束时间 */
	private Date endTime;
	/** 人群标签规则标识 */
	private String tagId;
	/** 人群标签规则范围 */
	private String tagScope;


	@Getter
	@Builder
	@AllArgsConstructor
	@NoArgsConstructor
	public static class GroupBuyDisCount{
		/**
		 * 折扣标题
		 */
		private String discountName;

		/**
		 * 折扣描述
		 */
		private String discountDesc;

		/**
		 * 折扣类型（0:base、1:tag）
		 */
		private DiscountTypeEnum discountType;

		/**
		 * 营销优惠计划（ZJ:直减、MJ:满减、N元购）
		 */
		private String marketPlan;

		/**
		 * 营销优惠表达式
		 */
		private String marketExpr;

		/**
		 * 人群标签，特定优惠限定
		 */
		private String tagId;


	}


	/**
	 * 可见限制
	 * 只要存在这样一个值，那么首次获得的默认值就是 false
	 */
	public boolean isVisible() {
		String[] split = this.tagScope.split(Constants.SPLIT);
		if (split.length > 0 && Objects.equals(split[0], "1") && StringUtils.isNotBlank(split[0])) {
			return false;
		}
		return true;
	}

	/**
	 * 参与限制
	 * 只要存在这样一个值，那么首次获得的默认值就是 false
	 */
	public boolean isEnable() {
		String[] split = this.tagScope.split(Constants.SPLIT);
		if (split.length == 2 && Objects.equals(split[1], "2") && StringUtils.isNotBlank(split[1])) {
			return false;
		}
		return true;
	}

}
